﻿using ExcellentProjectPlus.Aplicacion.Examenes.Calendarizaciones;
using ExcellentProjectPlus.Dominio.Examenes.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Examenes.Controllers
{
    public class CalendarizacionesController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeCalendarizaciones _servicioDeGestionDeCalendarizaciones;
        #endregion

        #region Constructores
        public CalendarizacionesController(IServicioDeGestionDeCalendarizaciones servicioDeGestionDeCalendarizaciones)
        {
            _servicioDeGestionDeCalendarizaciones = servicioDeGestionDeCalendarizaciones;
        }
        #endregion

        //GET
        [HttpGet]
        [ResponseType(typeof(Calendarizacion))]
        public IHttpActionResult ObtenerTodos()
        {
            IEnumerable<Calendarizacion> calendarizaciones = _servicioDeGestionDeCalendarizaciones.ObtenerCalendarizaciones();
            if (calendarizaciones == null)
            {
                return NotFound();
            }

            return Ok(calendarizaciones);
        }


        //GET
        [HttpGet]
        [Route("api/calendarizaciones/{id}")]
        [ResponseType(typeof(Calendarizacion))]
        public IHttpActionResult ObtenerCalendarizacionPorId(int id)
        {
            Calendarizacion calendarizacion = _servicioDeGestionDeCalendarizaciones.ObtenerCalendarizacionPorId(id);
            if (calendarizacion == null)
            {
                return NotFound();
            }

            return Ok(calendarizacion);
        }

        [HttpPost]
        [ResponseType(typeof(Calendarizacion))]
        public IHttpActionResult PostCalendarizacion(Calendarizacion calendarizacion)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            _servicioDeGestionDeCalendarizaciones.AgregarCalendarizacion(calendarizacion);

            return CreatedAtRoute("DefaultApi", new { id = calendarizacion.IdCalendarizacion }, calendarizacion);
        }

        [HttpPut]
        [Route("api/calendarizaciones/{id}")]
        [ResponseType(typeof(Calendarizacion))]
        public IHttpActionResult PutCalendarizacion(int id, [FromBody]Calendarizacion calendarizacion)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            if (id != calendarizacion.IdCalendarizacion)
                return BadRequest();

            _servicioDeGestionDeCalendarizaciones.ModificarCalendarizacion(calendarizacion);

            return StatusCode(HttpStatusCode.NoContent);

        }

        [HttpDelete]
        [Route("api/calendarizaciones/{id}")]
        [ResponseType(typeof(Calendarizacion))]
        public IHttpActionResult DeleteCalendarizacion(int id)
        {
            Calendarizacion calendarizacion = _servicioDeGestionDeCalendarizaciones.ObtenerCalendarizacionPorId(id);

            if (calendarizacion == null)
                return NotFound();

            _servicioDeGestionDeCalendarizaciones.EliminarCalendarizacion(calendarizacion);
            return Ok(calendarizacion);
        }
    }
}